﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Configuration;

using System.Data.SqlClient;
using MySql.Data.MySqlClient;

namespace JA.Negocios
{
    public static partial class ModelBO
    {

        public static CategoriaVO getCategoria(int idCategoria, string categoria)
        {
            CategoriaVO categoriaVO = null;
            List<CategoriaVO> listCategoriaVOs = getCategorias(idCategoria, categoria, null);
            if (listCategoriaVOs != null && listCategoriaVOs.Count > 0)
            {
                categoriaVO = listCategoriaVOs[0];
            }
            return categoriaVO;
        }

        public static List<CategoriaVO> getCategorias()
        {
            return getCategorias(null,null,null);
        }

        public static List<CategoriaVO> getCategorias(int? idCategoria, string categoria, int? idTipo)
        {
            string where = "AND ";
            StringBuilder query = new StringBuilder();

            query.AppendLine("SELECT IdCategoria, Categoria, tipo.IdTipo, tipo.Tipo, categoria.Cadastro, categoria.CadastradoPor, categoria.Edicao, categoria.EditadoPor ");
            query.AppendLine("FROM categoria, tipo ");
            query.AppendLine("WHERE categoria.idTipo = tipo.idTipo ");
            if (idCategoria != null)
            {
                query.AppendLine(where + "IdCategoria=?IdCategoria ");
                where = "AND ";
            }
            if (categoria != null)
            {
                query.AppendLine(where + "Categoria LIKE ?Categoria ");
                where = "AND ";
            }
            if (idTipo != null)
            {
                query.AppendLine(where + "tipo.IdTipo=?IdTipo ");
                where = "AND ";
            }

            query.AppendLine("ORDER BY Categoria ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            if (idCategoria != null) cmd.Parameters.AddWithValue("?IdCategoria", idCategoria);
            if (categoria != null) cmd.Parameters.AddWithValue("?Categoria", "%" + categoria + "%");
            if (idTipo != null) cmd.Parameters.AddWithValue("?IdTipo", idTipo);

            MySqlDataReader reader = null;
            try
            {
                cmd.Connection.Open();

                reader = cmd.ExecuteReader();

                List<CategoriaVO> listCategoria = new List<CategoriaVO>();

                while (reader.Read())
                {
                    CategoriaVO categoriaVO = CategoriaVO.CreateCategoriaVO();
                    categoriaVO.idCategoria = reader.GetInt32(reader.GetOrdinal("IdCategoria"));
                    categoriaVO.categoria = reader.GetString(reader.GetOrdinal("Categoria"));
                    categoriaVO.tipo.idTipo = reader.GetInt32(reader.GetOrdinal("IdTipo"));
                    categoriaVO.tipo.tipo = reader.GetString(reader.GetOrdinal("Tipo"));
                    categoriaVO.cadastro = reader.GetDateTime(reader.GetOrdinal("Cadastro"));
                    categoriaVO.cadastradoPor = reader.GetString(reader.GetOrdinal("CadastradoPor"));
                    categoriaVO.edicao = reader.GetDateTime(reader.GetOrdinal("Edicao"));
                    categoriaVO.editadoPor = reader.GetString(reader.GetOrdinal("EditadoPor"));
                    listCategoria.Add(categoriaVO);
                }
                reader.Close();
                return listCategoria;
            }
            catch (Exception ex){ throw ex; }
            finally { cmd.Connection.Close(); }
        }

        public static void setCategoria(CategoriaVO categoriaVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("UPDATE categoria ");
            query.AppendLine("SET Categoria=?Categoria, IdTipo=?IdTipo, Cadastro=?Cadastro, CadastradoPor=?CadastradoPor, Edicao=?Edicao, EditadoPor=?EditadoPor ");
            query.AppendLine("WHERE IdCategoria=?IdCategoria ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdCategoria", categoriaVO.idCategoria);
            cmd.Parameters.AddWithValue("?Categoria", categoriaVO.categoria);
            cmd.Parameters.AddWithValue("?IdTipo", categoriaVO.tipo.idTipo);
            cmd.Parameters.AddWithValue("?Cadastro", categoriaVO.cadastro);
            cmd.Parameters.AddWithValue("?CadastradoPor", categoriaVO.cadastradoPor);
            cmd.Parameters.AddWithValue("?Edicao", categoriaVO.edicao);
            cmd.Parameters.AddWithValue("?EditadoPor", categoriaVO.editadoPor);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }

        public static long newCategoria(CategoriaVO categoriaVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("INSERT INTO categoria ");
            query.AppendLine("  ( Categoria, IdTipo, Cadastro, CadastradoPor, Edicao, EditadoPor ) ");
            query.AppendLine("VALUES (?Categoria, ?IdTipo, ?Cadastro, ?CadastradoPor, ?Edicao, ?EditadoPor ) ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?Categoria", categoriaVO.categoria);
            cmd.Parameters.AddWithValue("?IdTipo", categoriaVO.tipo.idTipo);
            cmd.Parameters.AddWithValue("?Cadastro", categoriaVO.cadastro);
            cmd.Parameters.AddWithValue("?CadastradoPor", categoriaVO.cadastradoPor);
            cmd.Parameters.AddWithValue("?Edicao", categoriaVO.edicao);
            cmd.Parameters.AddWithValue("?EditadoPor", categoriaVO.editadoPor);

            try
            {
                cmd.Connection.Open();
                cmd.ExecuteNonQuery();
                return cmd.LastInsertedId;
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }

        public static void delCategoria(CategoriaVO categoriaVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("DELETE FROM categoria ");
            query.AppendLine("WHERE IdCategoria=?IdCategoria ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdCategoria", categoriaVO.idCategoria);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }
    }
}
